import pinyin from "js-pinyin";

pinyin.setOptions({checkPolyphone: true, charCase: 2});
/**
 * 字典转枚举全局方法
 * @param {Array} dictData 字典数据数组
 * @returns {Object} 枚举对象 {键: 值}
 * 生成规则：
 * - 键：将label转为全大写（中文自动转拼音）
 * - 值：字典原始value值
 * 示例：{PAID: 1, UNPAID: 0}
 */
export const dictToEnums = (dictData) => {
  if (!Array.isArray(dictData)) return {}

  return dictData.reduce((acc, cur) => {
    const key = pinyin.getFullChars(cur.label);
    acc[key] = cur.value
    return acc
  }, {})
}

// 缓存字典枚举
const enumCache = new Map()

/**
 * 获取字典枚举（带缓存）
 * @param {String} dictType 字典类型
 * @param {VueComponent} vm 组件实例
 * @returns {Object} 枚举对象
 */
export const getEnums = (dictType, vm) => {
  if (!enumCache.has(dictType)) {
    const dictData = vm?.dict?.type?.[dictType] || []
    enumCache.set(dictType, dictToEnums(dictData))
  }
  return enumCache.get(dictType)
}
